/*! \file Node.h
 *	\brief <write description for Node.h>
 *
 *	created:	2009/11/24
 *	created:	24:11:2009   15:33
 *	filename: 	o:\gag-engine\libs\sg\Node.h
 *	file path:	o:\gag-engine\libs\sg
 *	file base:	Node
 *	file ext:	h
 *	author:		Vitalii Trubchaninov
 *				venngraydog@gmail.com
 */

#ifndef _SG_NODE_H_
#define _SG_NODE_H_

#pragma once

#include <core/SmartPtr.h>
#include <core/Vector.h>
#include <math/Matrix4x4.h>

namespace tt{
namespace sg{

class Node;

typedef core::Vector< SharedPtr<Node> >::Type Nodes;

class Node
{
public:
	Node();
	virtual ~Node();

	Node* parent() const;

	void addChild(const SharedPtr<Node>&);
	const Nodes& childs() const;

	void setLocalTransformation(const math::Matrix4x4F&);
	const math::Matrix4x4F& localTransformation() const;

private:
	Node* m_parent;
	Nodes m_childs;

	math::Matrix4x4F m_localTransformation;
};

} //namespace sg
} //namespace tt

#endif //_SG_NODE_H_